iT邦幫忙

14

[好用的 Script] 以日期區分的 log rotate

  • 分享至 

  • xImage
  •  

在回應 哪裡還有這本書 "Shell Programming 333個應用範例技巧大全集?" 時,回去翻自己過去常用的一些資源,有些在裝系統的時候還會拿出來用一用,有些是好久沒有去造訪了;在此就把一些自己在系統管理上,或說在Command Line環境下,常會用的一些工具或資源,備忘出來,省得往舊機器裡面找資料。
newsyslog
這是我最常用也覺得最好用的shell script,是 Solaris 上都會有的一個 log rotate 的script,
通常在 Solaris 裡是在:/usr/lib/newsyslog ,基本上內容都是長這個樣子:http://web.mit.edu/shutkin/MacData_1124b/afs/net/system/sun4c_41/rsp.01/usr/lib/newsyslog
雖然有 logrotate, cronlog 等現成的工具,但自己希望做到每天一個檔,像 access.log.20090520 ,就比較不容易或麻煩,甚至要改 apache 上相關 log 的設定,而只要改寫 newsyslog 成為:

#!/bin/sh

LOGDIR=/where/nginx/logs
if test -d $LOGDIR
then
        cd $LOGDIR
        for LOG in access.log error.log
        do
        if test -s $LOG
        then
                test -f $LOG && mv $LOG  $LOG.`date +%Y%m%d`
                /bin/cp -f /dev/null $LOG
                chmod 644    $LOG
        fi
        done
chown nginx.nginx access.log error.log
#chmod 644 access.log error.log
fi
kill -HUP `cat /var/run/nginx.pid`

然後再用 crontab 中,每天晚上12點前來rotate,就可以每天一個檔了。

58 23 * * * /where/my/newsyslog 2>&1

所以不管在任何版本的 Linux, Unix, Solaris, BSD,此 script 都適用。

常指定在有查詢log需要,且每天的量也較大時,這樣的分檔就很方便。
當要查某字串,是否在哪些天裡有,透過 grep, fgrep, egrep 抓出來。
較常用在 mail log,procmail log, spam filter log, web log。

若有邦友對 logrotate, cronlog 或其他相關 log rotate 的程式,也可以容易地來做出以日期來區別的話,也請分享一下其作法。


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
灌籃高手
iT邦高手 1 級 ‧ 2009-05-21 15:06:26

cronolog也不錯用

從可看到的範例來看,好像都是與 apache 上的設定結合,
CustomLog "|/usr/sbin/cronolog /var/log/httpd/access_%Y%m%d.log" combined
看起來是其設定檔可以接受 | pipe line 的語法,才可以這樣設,
而 maillog 或其他 /var/log 下的檔案,好像看不出怎麼與 cronolog 結合使用…。
The cronolog program is normally invoked as a piped log filter program from Apache as specified in the configuration file.
所以看起來前提是該程式可以pipe log的設定。

0
蟹老闆
iT邦大師 1 級 ‧ 2009-05-21 15:21:22

感謝分享

0
kuochiahao
iT邦研究生 1 級 ‧ 2009-05-25 16:09:47

感謝分享

我要留言

立即登入留言